package main

import (
	"bufio"
	"fmt"
	"os"
	"path/filepath"
	"strconv"
	"strings"
)

// loadExamplesFromFile 从文件加载示例数据
func loadExamplesFromFile(filename string) ([]Example, error) {
	var examples []Example

	file, err := os.Open(filename)
	if err != nil {
		return examples, fmt.Errorf("无法打开文件 %s: %v", filename, err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := strings.TrimSpace(scanner.Text())
		if line == "" {
			continue
		}

		parts := strings.Split(line, "|")
		if len(parts) < 4 {
			continue
		}

		id, err := strconv.Atoi(strings.TrimSpace(parts[0]))
		if err != nil {
			continue
		}

		example := Example{
			ID:           id,
			Directory:    strings.TrimSpace(parts[1]),
			Title:        strings.TrimSpace(parts[2]),
			ChineseTitle: strings.TrimSpace(parts[3]),
		}

		examples = append(examples, example)
	}

	if err := scanner.Err(); err != nil {
		return examples, fmt.Errorf("读取文件时出错: %v", err)
	}

	fmt.Printf("成功加载 %d 个示例\n", len(examples))
	return examples, nil
}

// createExamplesDataFile 创建示例数据文件（如果不存在）
func createExamplesDataFile(filename string) error {
	if _, err := os.Stat(filename); err == nil {
		// 文件已存在
		return nil
	}

	content := `1|01-hello-world|Hello World|你好世界
2|02-values|Values|值
3|03-variables|Variables|变量
4|04-constants|Constants|常量
5|05-for-loops|For Loops|For循环
6|06-if-else|If/Else|If/Else条件判断
7|07-case-switch|Case/Switch|Case/Switch选择结构
8|08-arrays|Arrays|数组
9|09-sets|Sets|集合
10|10-records|Records|记录`

	err := os.WriteFile(filename, []byte(content), 0644)
	if err != nil {
		return fmt.Errorf("创建示例数据文件失败: %v", err)
	}

	fmt.Printf("创建示例数据文件: %s\n", filename)
	return nil
}

// createDirectory 创建目录
func createDirectory(dir string) error {
	if _, err := os.Stat(dir); os.IsNotExist(err) {
		err := os.MkdirAll(dir, 0755)
		if err != nil {
			return fmt.Errorf("创建目录失败 %s: %v", dir, err)
		}
		fmt.Printf("创建目录: %s\n", dir)
	}
	return nil
}

// createFile 创建文件
func createFile(filename, content string) error {
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		err := os.WriteFile(filename, []byte(content), 0644)
		if err != nil {
			return fmt.Errorf("创建文件失败 %s: %v", filename, err)
		}
		fmt.Printf("创建文件: %s\n", filename)
	}
	return nil
}

// getFileType 获取文件类型
func getFileType(filename string) string {
	ext := strings.ToLower(filepath.Ext(filename))
	switch ext {
	case ".jpg", ".jpeg", ".png", ".gif", ".bmp":
		return "image"
	case ".pas", ".pp", ".inc", ".txt", ".md":
		return "text"
	default:
		return "unknown"
	}
}